package com.example.thread;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

// 对比DeadlockExample03来看的话，由于ReentrantLock它本来也是可重入的，所以，下面代码其实也不会形成死锁。
// 如果要演示不可重入的锁，应该要自己定义一个一个Lock的实现类，在内部写些逻辑，让它不可重入。
public class DeadlockExample04 {
    // ReentrantLock也是可重入锁
    private static final Lock lock = new ReentrantLock();
    private static int i = 1;

    public static void main(String[] args) {
        new Thread(() -> {
            recursiveMethod();
        }).start();
    }

    // 递归方法
    private static void recursiveMethod() {
        lock.lock();
        System.out.println(Thread.currentThread().getName() + "获取了锁");

        while (DeadlockExample04.i < 10) {
            DeadlockExample04.i++;
            // 递归调用自身
            recursiveMethod();
        }
    }
}
